Training accurate machine learning models involves two challenges. The first challenge is to provide the model with a good set of input variables (feature set), which currently involves using various feature selection, feature extraction, and feature engineering techniques. For each set of candidate features, the best way to check if it improves the prediction accuracy is to retrain the model and determine if a cross validation error decreases or a validation error decreases or an accuracy increases. The second challenge is to select the hyperparameters used to train the model. The selection of the feature set and the hyperparameters has a tremendous effect on the prediction accuracy of the resulting model. Both tasks are challenging and computationally expensive because they require repeated training of different models in high-dimensional spaces.